import router from "./router";
import store from "./store";
//import { Message } from 'element-ui'
//import NProgress from 'nprogress' // progress bar
//import 'nprogress/nprogress.css' // progress bar style
import { getToken } from "@/utils/auth"; // get token from cookie
import getPageTitle from "@/utils/get-page-title";

//NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ["/login", "/auth-redirect"]; // no redirect whitelist

router.beforeEach(async (to, from, next) => {
  // start progress bar
  //NProgress.start()

  // set page title
  document.title = getPageTitle(to.meta.title);

  // determine whether the user has logged in
  //const hasToken = getToken()
  //const hasToken = store.state.user.token
  const hasToken = localStorage.getItem("accessToken");

  console.log("store.state.user.token------------", store.state.user.token);
  console.log("hasToken------------", hasToken);
  if (hasToken) {
    if (to.path === "/login") {
      //     // if is logged in, redirect to the home page
      next({ path: "/" });
      //     //NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939
    } else if (whiteList.indexOf(to.path) !== -1) {
      next();
    } else {
      //     // determine whether the user has obtained his permission roles through getInfo
      const hasRoles = store.getters.roles && store.getters.roles.length > 0;
      console.log("hasRoles--------------->", JSON.stringify(hasRoles));
      if (hasRoles) {
        next();
        //next({ path: '/' })
      } else {
        //       try {
        //         // get user info
        //         // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
        const { roles } = await store.dispatch("user/getInfo");
        console.log("roles--------------->", JSON.stringify(roles));

        //         // generate accessible routes map based on roles
        const accessRoutes = await store.dispatch(
          "permission/GenerateRoutes",
          roles
        );
        console.log(
          "accessRoutes--------------->",
          JSON.stringify(accessRoutes)
        );

        //         console.log('accessRoutes------------>', accessRoutes)
        //         // dynamically add accessible routes
        router.addRoute(accessRoutes);

        //         // hack method to ensure that addRoutes is complete
        //         // set the replace: true, so the navigation will not leave a history record
        next({ ...to, replace: true });
        //       } catch (error) {
        //         // remove token and go to login page to re-login
        //         await store.dispatch('user/resetToken')
        //         //Message.error(error || 'Has Error')
        //         console.error(error)
        //         next(`/login?redirect=${to.path}`)
        //         window.location.href=""
        //         //NProgress.done()
        //       }
      }
    }
  } else {
    //   /* has no token*/
    if (whiteList.indexOf(to.path) !== -1) {
      //     // in the free login whitelist, go directly
      next();
    } else {
      //     // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.fullPath}`);
      //     //window.location.href = 'http://127.0.0.1:8087/client/';
      //     //NProgress.done()
    }
  }
});

router.afterEach(() => {
  // finish progress bar
  //NProgress.done()
});
